home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / graphics / scan.lzh / SCANNER.S < prev   
Text File  |  1991-02-21  |  7KB  |  231 lines

  1.          opt o+
  2.  
  3.         bra    start            ;Program start
  4.  
  5.         include    d:\devpac2\aes.s    ;Only AES macros
  6.  
  7. start:        clr.b    file_name        ;No file name
  8.         initacc                ;Init GEM
  9.         tst.w    appid            ;PRG or ACC ?
  10.         bne.s    inst_acc        ;Install ACC
  11.         bsr.s    main            ;Run PRG
  12.         clr.w    -(sp)            ;Term
  13.         trap    #1            ;Gemdos
  14.  
  15. inst_acc:    move.w    appid(pc),int_in    ;Our AES ID
  16.         move.l    #acc_name,addr_in    ;Our Desk name
  17.         aes    menu_register        ;Install ACC
  18. event_loop:    move.l    #msgbuff,addr_in    ;Set buffer
  19.         aes    evnt_mesag        ;Get event
  20.         cmpi.w    #40,msgbuff        ;ACC_open ?
  21.         bne.s    event_loop        ;No, wait
  22.         bsr.s    main            ;Yes, open acc
  23.         bra.s    event_loop        ;Wait for next time
  24.     
  25. main:        movem.l    d0-a6,-(sp)        ;Save all registers
  26.         move.w    #3,int_in        ;Disable Mouse
  27.         aes    wind_update
  28.  
  29.         lea    file_path(pc),a5    ;Adress of string
  30.         move.w    #$19,-(sp)        ;Get drive
  31.         trap    #1            ;Gemdos
  32.         addq.l    #2,sp
  33.         addq.w    #1,d0            ;Make 1-offset drive id
  34.         move.w    d0,-(sp)        ;Push on stack
  35.         addi.b    #64,d0            ;Make ASCII
  36.         move.b    d0,(a5)            ;Save in string
  37.         move.b    #':',1(a5)        ;Save ':' in string
  38.         pea    2(a5)            ;Buffer for dir-name
  39.         move.w    #$47,-(sp)        ;Get dir
  40.         trap    #1            ;Gemdos
  41.         addq.l    #8,sp
  42.         lea    (a5),a4            ;Start of text
  43. check_next:    tst.b    (a4)+            ;End of string ?
  44.         beq.s    end_str            ;Yes, stop scan
  45.         bra.s     check_next        ;Check next char
  46. end_str:    subq.l    #1,a4            ;One char back
  47.         lea    extension(pc),a5    ;Data adress
  48. move_char:    move.b    (a5),(a4)+        ;Move data
  49.         tst.b    (a5)+            ;Was it $00 ?
  50.         bne.s    move_char        ;No, next char
  51.  
  52.         move.l    #file_path,addr_in    ;Path for fsel
  53.         move.l    #file_name,addr_in+4    ;File name for fsel
  54.         move.l    #fsel_message,addr_in+8    ;Info message (>TOS 1.4)
  55.         aes    fsel_exinput        ;Extended file selector
  56.         tst.w    int_out+2        ;Cancel pressed ?
  57.         beq    abort_acc        ;Yes, abort
  58.         
  59.         dc.w    $A00A            ;Hide Mouse
  60.         clr.l    int_in            ;Just border, x=0
  61.         move.w    #19,int_in+4        ;Full size
  62.         move.w    #640,int_in+6        ;Full size
  63.         move.w  #381,int_in+8        ;Full size
  64.         aes    wind_create
  65.         move.w    int_out(pc),w_handle    ;Save handle
  66.         move.w    w_handle(pc),int_in    ;Window handle
  67.         aes    wind_open
  68.         
  69. scan_image:    clr.l    -(sp)            ;Super mode
  70.         move.w    #$20,-(sp)        ;Super
  71.         trap    #1            ;Gemdos
  72.         addq.l    #6,sp
  73.         move.l    d0,save_ssp        ;Save stack
  74.         
  75.         movea.l $44E.w,a0        ;Screen adress
  76.         adda.l    #19*80,a0        ;19 lines for menu
  77.         move.l    a0,screen        ;save screen start
  78.  
  79.         move.l    a0,a1            ;Copy of start
  80.         move.w    #7619,d7        ;Counter
  81. blank_screen:    move.l    #$FFFFFFFF,(a1)+    ;Black screen
  82.         dbf.w    d7,blank_screen        ;Next long
  83.  
  84.         move.b    #8,d5            ;For btst of roller
  85.         move.b    #1,d3            ;For btst of data
  86.         move.w    #380,d7            ;381 lines/screen
  87.  
  88.         lea    $FB0000,a1        ;Status & Roller pos
  89.         lea    $FB1000,a2        ;Data request
  90.         lea    $FB2001,a3        ;Data receive
  91.  
  92.         move.b    #$13,$FFFFFC02.W    ;Shut off Keyboard
  93.         move.w    #$2700,sr        ;Interrupts off
  94.         tst.w    $FB4000            ;Scanner light on
  95.         
  96. scan_line:    moveq    #79,d6            ;80 bytes/line
  97. wait_roller:    move.w    (a1),d2            ;Get roller status
  98.         btst.l    d5,d2            ;Has roller moved
  99.         bne.s    wait_roller        ;No, wait for move
  100. get_blank:    tst.w    (a2)            :Ask for data
  101. wait_blank:    btst.b    d3,(a1)            ;Data ready ?
  102.         beq.s    wait_blank        ;No, wait for blank
  103. get_data:    tst.w    (a2)            ;Ask for data
  104. wait_data:    btst.b    d3,(a1)            ;Data ready ?
  105.         beq.s    wait_data        ;No, wait for data
  106.         move.b    (a3),(a0)+        ;Move data to screen
  107.         dbf.w    d6,get_data        ;Ask for more data
  108.         dbf.w    d7,scan_line        ;Wait for next line
  109.         
  110.         tst.w    $FB3000            ;Scanner light off
  111.         move.w    #$2300,sr        ;Interrupts on
  112.         move.b    #$11,$FFFFFC02.W    ;Keyboard on again
  113.  
  114.         move.l  save_ssp(pc),-(sp)    ;User mode
  115.         move.w    #$20,-(sp)        ;Super
  116.         trap    #1            ;Gemdos
  117.         addq.l    #6,sp
  118.  
  119.         dc.w    $A009            ;Show mouse
  120.         move.w    #1,int_in        ;Default button
  121.         move.l    #alert,addr_in        ;Alert box text
  122.         aes    form_alert        ;Do alert box
  123.         dc.w    $A00A            ;Hide Mouse
  124.  
  125.         cmp.w    #1,int_out        ;Scan button ?
  126.         beq    scan_image        ;Yes, Again
  127.  
  128.         cmp.w    #2,int_out        ;Save button ?
  129.         bne    close_window        ;No, Close ACC
  130.  
  131.         lea    file_name(pc),a6    ;Start filename
  132. check_char:    cmp.b    #'.',(a6)        ;Found '.' ?
  133.         beq.s    name_ok            ;Yes, Name OK
  134.         tst.b    (a6)+            ;End of text ?
  135.         bne.s    check_char        ;No, Check next
  136.         subq.l    #1,a6            ;Yes, One char back
  137.         lea    extension+2(pc),a5    ;Data '.PI3'
  138. move_char2:    move.b    (a5),(a6)+        ;Move data
  139.         tst.b    (a5)+            ;Was it $00 ?
  140.         bne.s    move_char2        ;No, next char
  141.  
  142. name_ok:    lea    file_path(pc),a6    ;Path-name
  143.         clr.w    d0            ;Last '\' pos
  144.         clr.w    d1            ;Char counter
  145. check_slash:    cmp.b    #'\',(a6,d1.w)        ;Found new '\' ?
  146.         bne.s    check_end
  147.         move.w    d1,d0            ;Save last '\'
  148. check_end:    tst.b    (a6,d1.w)        ;End of text
  149.         beq.s    finished
  150.         addq.w    #1,d1            ;Next char
  151.         bra.s    check_slash
  152.  
  153. finished:    lea    file_name(pc),a5    ;Start filename
  154. move_name:    addq.w    #1,d0            ;Next char in path
  155.         move.b    (a5),(a6,d0.w)        ;Move after path
  156.         tst.b    (a5)+            ;End of name ?
  157.         bne.s    move_name        ;No, next char
  158.  
  159.         clr.w    -(sp)            ;Read and Write        
  160.         move.l    a6,-(sp)        ;Full name of file
  161.         move.w    #$3C,-(sp)        ;Create file
  162.         trap    #1            ;Gemdos
  163.         addq.l    #8,sp
  164.         tst.w    d0            ;Error ?
  165.         bmi.s    close_window        ;Yes, Abort
  166.         move.w    d0,handle        ;Save file handle
  167.         
  168.         pea    file_start(pc)        ;Start of PI3-file
  169.         move.l    #4,-(sp)        ;4 bytes
  170.         move.w    handle(pc),-(sp)    ;File handle
  171.         move.w    #$40,-(sp)        ;Write data
  172.         trap    #1            ;Gemdos
  173.         lea    12(sp),sp
  174.  
  175.         move.w    #14,d7            ;15 empty words
  176.         bsr.s    fill_zero        ;Fill file with $0000
  177.  
  178.         move.l    screen(pc),-(sp)    ;Start of screen
  179.         move.l    #30480,-(sp)        ;30480 bytes
  180.         move.w    handle(pc),-(sp)    ;File handle
  181.         move.w    #$40,-(sp)        ;Write data
  182.         trap    #1            ;Gemdos
  183.         lea    12(sp),sp
  184.         
  185.         move.w    #759,d7            ;760 empty words                
  186.         bsr.s    fill_zero        ;Fill file with $0000
  187.  
  188.         move.w    handle(pc),-(sp)    ;File handle
  189.         move.w    #$3E,-(sp)        ;Close file
  190.         trap    #1            ;Gemdos
  191.         addq.l    #4,sp
  192.  
  193. close_window:    move.w    w_handle(pc),int_in    ;Window handle
  194.         aes    wind_close
  195.         aes    wind_delete
  196.         dc.w    $A009            ;Show mouse
  197.  
  198. abort_acc:    move.w    #2,int_in        ;Enable Mouse
  199.         aes    wind_update
  200.         movem.l    (sp)+,d0-a6        ;Restore registers
  201.         rts                ;End of program
  202.  
  203. fill_zero:    pea    file_start-2(pc)    ;Blank word
  204.         move.l    #2,-(sp)        ;4 bytes
  205.         move.w    handle(pc),-(sp)    ;File handle
  206.         move.w    #$40,-(sp)        ;Write data
  207.         trap    #1            ;Gemdos
  208.         lea    12(sp),sp
  209.         dbf.w    d7,fill_zero        ;Next word
  210.         rts
  211.  
  212. extension:    dc.b    '\*.PI3',0,0        
  213. file_start:    dc.w    $0002,$0777
  214. acc_name:    dc.b    '  GeniScan Scanner',0
  215. fsel_message:    dc.b    'Select file for scanned image',0
  216. alert:        dc.b    '[0][ © Lars-Erik Østerud  1991|'
  217.          dc.b    '---------------------------  |'
  218.         dc.b    ' Scan complete, what now ?]'
  219.         dc.b    '[ Scan |Save|Quit]',0
  220.  
  221.         section bss
  222.  
  223.         even
  224. msgbuff:    ds.w    16    ;Message buffer
  225. file_path:    ds.b    80    ;File path
  226. file_name:    ds.b    14    ;File name
  227. w_handle:    ds.w    1    ;Window handle
  228. save_ssp:    ds.l    1    ;Old stack adress
  229. handle:        ds.w    1    ;Place for file handle
  230. screen:        ds.l    1    ;Adress for screen start
  231.